/**
 * 文件名：@AfwJpaRepositoryFactory.java <br/>
 * 包名：cn.efunbox.afw.data.jpa.spring.support <br/>
 * 项目名：afw-data <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.data.jpa.spring.support;

import static org.springframework.data.querydsl.QueryDslUtils.QUERY_DSL_PRESENT;

import javax.persistence.EntityManager;

import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
import org.springframework.data.jpa.repository.support.QueryDslJpaRepository;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.data.repository.core.RepositoryMetadata;

/**
 * 类名：AfwJpaRepositoryFactory  <br />
 *
 * 功能：
 *
 * @author xtwin <br />
 * 创建时间：2016年7月26日 下午3:13:48  <br />
 * @version 2016年7月26日
 */
public class AfwJpaRepositoryFactory extends JpaRepositoryFactory {
	
	// 基础类型
	protected Class<?> repositoryBaseClass = AfwSimpleJpaRepository.class;

	/**
	 * 构造方法
	 */
	public AfwJpaRepositoryFactory(EntityManager entityManager) {
		super(entityManager);
	}
	
	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月26日 下午3:19:07<br/>
	 * 
	 * @param metadata
	 * @return <br/>
	 * @see org.springframework.data.jpa.repository.support.JpaRepositoryFactory#getRepositoryBaseClass(org.springframework.data.repository.core.RepositoryMetadata)
	 */
	@Override
	protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
		if (QUERY_DSL_PRESENT && QueryDslPredicateExecutor.class.isAssignableFrom(metadata.getRepositoryInterface())) {
			return QueryDslJpaRepository.class;
		} else {
			return repositoryBaseClass;
		}
	}

	/**
	 * @version 2016年7月27日-上午11:27:39
	 */
//	public void setRepositoryBaseClass(Class<?> repositoryBaseClass) {
//		this.repositoryBaseClass = repositoryBaseClass;
//	}
}